/* You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones. */

/*   Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap. */

/*   For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend. */

#include <iostream>

using namespace std;

bool helper(int n, int isMe);

bool canWinNim(int n) {

  int isMe = 0; // 0 : it is me; 1 : it is you

  return helper(n, isMe);
}

bool helper(int n, int isMe)
{
  if(n==0)
    {
      if(isMe==0) return false;
      else return true;
    }

  
  if(true==helper(n-1, !isMe)) return true;
  else if(true==helper(n-2, !isMe)) return true;
  else if(true==helper(n-3, !isMe)) return true;
  else return false;    
}

int main()
{
  int n = 4;
  cout << canWinNim(n) << endl;
  
  return 0;
}
